package org.example.myleet.p640;

public class Solution {

    public String solveEquation(String equation) {
        String[] parts = equation.split("=");
        int xCount = 0, sum = 0;
        //left
        String processed = parts[0].replace("-", "+-");
        String[] elements = processed.split("\\+");
        for (String element : elements) {
            if (element.length() < 1) continue;
            if (element.endsWith("x")) {
                String count = element.substring(0, element.length() - 1);
                if (count.length() < 1) {
                    count = "1";
                } else if (count.length() == 1 && count.startsWith("-")) {
                    count = "-1";
                }
                xCount += Integer.parseInt(count);
            } else {
                sum -= Integer.parseInt(element);
            }
        }
        //right
        processed = parts[1].replace("-", "+-");
        elements = processed.split("\\+");
        for (String element : elements) {
            if (element.length() < 1) continue;
            if (element.endsWith("x")) {
                String count = element.substring(0, element.length() - 1);
                if (count.length() < 1) {
                    count = "1";
                } else if (count.length() == 1 && count.startsWith("-")) {
                    count = "-1";
                }
                xCount -= Integer.parseInt(count);
            } else {
                sum += Integer.parseInt(element);
            }
        }
        if (xCount == 0) {
            if (sum == 0) {
                return "Infinite solutions";
            } else {
                return "No solution";
            }
        }
        if (sum % xCount != 0) {
            return "No solution";
        }
        return String.format("x=%d", sum / xCount);
    }

//    public String solveEquation(String equation) {
//        String[] parts = equation.split("=");
//        int xCount = 0, sum = 0;
//        StringBuilder sb = new StringBuilder();
//        //left
//        boolean add = true;
//        for (int i = 0; i < parts[0].length(); ++i) {
//            char c = parts[0].charAt(i);
//            if (c == 'x') {
//                int count = 1;
//                if (sb.length() > 0) {
//                    count = Integer.parseInt(sb.toString());
//                    sb.delete(0, sb.length());
//                }
//                if (add) {
//                    xCount += count;
//                } else {
//                    xCount -= count;
//                }
//            } else if (Character.isDigit(c)) {
//                sb.append(c);
//            } else {
//                if (sb.length() > 0) {
//                    if (add) {
//                        sum -= Integer.parseInt(sb.toString());
//                    } else {
//                        sum += Integer.parseInt(sb.toString());
//                    }
//                    sb.delete(0, sb.length());
//                }
//                add = c == '+';
//            }
//        }
//        if (sb.length() > 0) {
//            if (add) {
//                sum -= Integer.parseInt(sb.toString());
//            } else {
//                sum += Integer.parseInt(sb.toString());
//            }
//            sb.delete(0, sb.length());
//        }
//        //right
//        add = true;
//        for (int i = 0; i < parts[1].length(); ++i) {
//            char c = parts[1].charAt(i);
//            if (c == 'x') {
//                int count = 1;
//                if (sb.length() > 0) {
//                    count = Integer.parseInt(sb.toString());
//                    sb.delete(0, sb.length());
//                }
//                if (add) {
//                    xCount -= count;
//                } else {
//                    xCount += count;
//                }
//            } else if (Character.isDigit(c)) {
//                sb.append(c);
//            } else {
//                if (sb.length() > 0) {
//                    if (add) {
//                        sum += Integer.parseInt(sb.toString());
//                    } else {
//                        sum -= Integer.parseInt(sb.toString());
//                    }
//                    sb.delete(0, sb.length());
//                }
//                add = c == '+';
//            }
//        }
//        if (sb.length() > 0) {
//            if (add) {
//                sum += Integer.parseInt(sb.toString());
//            } else {
//                sum -= Integer.parseInt(sb.toString());
//            }
//            sb.delete(0, sb.length());
//        }
//        if (xCount == 0) {
//            if (sum == 0) {
//                return "Infinite solutions";
//            } else {
//                return "No solution";
//            }
//        }
//        if (sum % xCount != 0) {
//            return "No solution";
//        }
//        return String.format("x=%d", sum / xCount);
//    }
}
